package com.xlh.service.statistic;

import com.xlh.dto.PageDTO;
import com.xlh.dto.statistic.*;
import com.xlh.dto.user.UserInfoDTO;
import com.xlh.param.statistic.UserInfoParam;
import com.xlh.support.attendance.po.SettingMarkPO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 统计
 * <p>
 * Created by lx on 2020/9/25.
 */
public interface StatisticService {

    /**
     * 课程班级的统计
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @return
     */
    StatisticDTO queryCourseClassStatistic(Long courseId, Long classId);

    /**
     * 获取随堂练习统计
     *
     * @param courseId  课程id
     * @param classId   班级id
     * @param errorRate 出错率
     */
    List<StudentChapterDTO> queryPracticeStatistic(Long courseId, Long classId, Integer errorRate);

    /**
     * 获取班级统计的更新时间
     *
     * @param classId 班级id
     * @return
     */
    String getClassUpdateTime(Long classId);

    /**
     * 手动更新班级统计
     *
     * @param userId  用户id
     * @param classId 班级id
     */
    void noAutoUpdate(Long userId, Long classId);

    /**
     * 更新统计
     *
     * @param classId 班级id
     * @return 课程id
     */
    List<Long> updateStatistic(Long classId);

    /**
     * 下载课程班级的统计excel
     *
     * @param courseId 课程id
     * @param classId  班级id
     */
    void downloadCourseClass(Long courseId, Long classId);

    /**
     * 获取课程班级的考试统计
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param examId   考试id
     * @return
     */
    StudentExamDTO queryCourseClassExam(Long courseId, Long classId, Long examId);

    /**
     * 获取学生的学习时长列表列表
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param param    搜索参数
     * @return
     */
    List<StatisticInfoDTO> queryStudentCourse(Long courseId, Long classId, UserInfoParam param);

    /**
     * 获取学生的考试统计列表
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param examId   考试id
     * @param param    搜索参数
     * @return
     */
    ExamDTO queryExamList(Long courseId, Long classId, Long examId, UserInfoParam param);

    /**
     * 获取考试id列表
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @return
     */
    List<Long> queryExamList(Long courseId, Long classId);

    /**
     * 获取任务/章节统计
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param param    搜索参数
     * @return
     */
    List<TaskDTO> queryTaskList(Long courseId, Long classId, UserInfoParam param);

    /**
     * 获取学生任务/章节分页
     *
     * @param pageNum  当前页
     * @param pageSize 每页显示条数
     * @param courseId 课程id
     * @param classId  班级id
     * @param userId   学生id
     * @param type     类型
     * @return
     */
    PageDTO<StudentTaskDTO> queryStudentTaskByPage(Integer pageNum, Integer pageSize,
                                                   Long courseId, Long classId, Long userId, Integer type);

    /**
     * 下载任务/章节
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param param    搜索参数
     */
    void downloadTask(Long courseId, Long classId, UserInfoParam param);

    /**
     * 获取章节统计
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param param    搜索参数
     * @return
     */
    List<ChapterDTO> queryChapterList(Long courseId, Long classId, UserInfoParam param);

    /**
     * 获取学生章节分页
     *
     * @param pageNum  当前页
     * @param pageSize 每页显示条数
     * @param courseId 课程id
     * @param classId  班级id
     * @param userId   学生id
     * @return
     */
    PageDTO<StudentChapterDTO> queryStudentChapterByPage(Integer pageNum, Integer pageSize,
                                                         Long courseId, Long classId, Long userId);

    /**
     * 下载章节
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param param    搜索参数
     */
    void downloadChapter(Long courseId, Long classId, UserInfoParam param);

    /**
     * 获取学生分页
     *
     * @param pageNum  当前页
     * @param pageSize 每页显示条数
     * @param classId  班级id
     * @param courseId 课程id
     * @return
     */
    PageDTO<UserInfoDTO> listStudentByPage(Integer pageNum, Integer pageSize, Long classId, Long courseId);

    /**
     * 班级下的学生统计下载
     *
     * @param classId  班级id
     * @param courseId 课程id
     */
    void downloadStudentStatistic(Long classId, Long courseId);

    /**
     * 获取学生统计
     *
     * @param classId  班级id
     * @param userId   学生id
     * @param courseId 课程id
     * @return
     */
    StduentDTO getStudentStatistic(Long classId, Long userId, Long courseId);

    /**
     * 获取学生课程统计
     *
     * @param courseId 课程id
     * @param classId  班级id
     * @param userId   学生id
     * @return
     */
    StatisticDTO getStudentCourseStatistic(Long courseId, Long classId, Long userId);

    /**
     * 获取学生统计
     *
     * @param userId 学生id
     * @return
     */
    StduentDTO getStudentStatistic(Long userId);


    /**
     * 满分的设置
     * @param settingMarkPO
     */
    void settingFullMark(SettingMarkPO settingMarkPO);


    /**
     * 设置分数
     * @param id
     * @param score
     */
    void settingScore(Long id, Integer score);


    /**
     * 数据导出成excel
     * @param courseId
     * @param classId
     * @param param
     */
    void exportData(Long courseId, Long classId, UserInfoParam param, HttpServletRequest request, HttpServletResponse response);


    /**
     * 获取满分
     * @param courseId
     * @param classId
     */
    Integer getfullmark(Long courseId, Long classId);



}
